package com.example.springthymeleafproject.repository;

import com.example.springthymeleafproject.model.Device;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;


@Repository
//它主要用于告诉Spring容器需要在该类中提供访问数据库的方法，并将该类扫描到Spring容器的上下文中。
public interface DeviceRepository extends JpaRepository<Device, Long> {
    //我们在 DeviceRepository 接口中定义了一个方法 findByNameContainingIgnoreCase，它会根据设备名称进行模糊查询，并且忽略大小写。该方法还接受一个 Pageable 对象作为参数，用于实现分页和排序。
    Page<Device> findByNameContainingIgnoreCase(String deviceName, Pageable pageable);
//    Spring Data JPA 提供了一种基于方法命名约定的方式，它会根据方法名自动解析查询，并生成相应的 SQL 查询语句，从而实现查询的功能。在命名约定中，
//    关键词 Containing 表示模糊查询，关键词 IgnoreCase 表示忽略大小写

    //通过部门的id查设备
    Page<Device> findByDepartmentId(Long departmentId, Pageable pageable);

    //在具体的实现类中，你只需要声明这个方法即可，而不需要实现它。Spring Data JPA 会自动根据命名约定以及实体类的定义，生成相应的查询代码
    //接下来，在的 DeviceServiceImpl 类中，可以直接调用 deviceRepository.searchByNamePaginated(deviceName, pageable) 方法
    // 来执行模糊查询并返回带分页和排序的结果。


}
